package com.codejoys.monitor.service;

import com.codejoys.monitor.domain.Channel;
import com.codejoys.monitor.dto.DeviceDto;
import com.codejoys.monitor.dto.SystemStatus;

import java.util.List;

public interface ModbusService {
    // 启动电源供电
    // 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01,    // 前7个字节固定
    // 0x05,
    // 0x00, mId,     // 地址，从00开始
    // (byte)0xff, 0x00    // 0xFF表示按下

    // 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01,
    // 0x05,
    // 0x00, mId,
    // 0x00, 0x00   // 00表示松开
    int startPower(DeviceDto deviceDto);

    // 停止电源供电
    int stopPower(DeviceDto deviceDto);

    // 停止电源供电
    int stopPowerOnStart(DeviceDto deviceDto);

    void startAll(List<DeviceDto> devices);

    void stopAll(List<DeviceDto> devices);

    // 读取四个机柜的温度（每个老化房两个，一个机柜对应18个设备）
    List<Integer> readTemperature();

    // 向触屏写模块的温度
    int sendModuleTemperature(String channel, int temperature);

    // 向触屏写报警信息
    //     0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01,  // 前7个字节固定
    //     0x06,    命令码
    //     0x00, cabinetId,     // 地址，固定是29（不区分模块，根据ip区分是哪个机柜）
    //     (byte)0xff, 0xff    发送报警
    int sendAlarm(DeviceDto deviceDto);

    //     0x00, 0x00 消除报警
    // 不分设备，解除所有报警
    int stopAlarm();

    // 读取电源启动状态（一次读取18个设备）
    List<Boolean> readPowerState(String cabinet);

    List<String> getTemperatures(String cabinet);

    SystemStatus checkSystemStatus();
}
